import { createApp, defineAsyncComponent, ref } from 'vue';
import App from '@/App.vue';
import router from '@/router/router';
import { createPinia } from 'pinia';
import i18nPlugin from '@/plugins/i18n';
import HButton from '@/components/common/HButton.vue';
import { globalProvideObjKey } from '@/types/provideInject';
import './styles/index.css';
import { buildTime, author } from 'virtual:build-info';
console.log(`构建时间：${buildTime}，作者：${author}`);


//创建应用实例
const app = createApp(App);

//为应用添加路由
app.use(router);

//为应用添加pinia
app.use(createPinia());

//vue插件可以是一个拥有 install() 方法的对象或一个函数。应用实例和options作为参数传递
app.use(i18nPlugin, {
	hello: '你好'
});

// 全局注册自定义指令
app.directive('focus', {
	mounted: (el, binding, vnode, prevVnode) => el.focus()
});

// 全局注册组件
app.component('HButton', HButton);
// 使用 defineAsyncComponent 注册全局异步组件
app.component('HSpan', defineAsyncComponent(() => import('@/components/common/HSpan.vue')));

//全局提供依赖
app.provide(globalProvideObjKey, {
	globalProvideNum: ref(0),
	update() { this.globalProvideNum.value = Math.ceil(Math.random() * 99); }
});

//将应用实例挂载到#app元素上, mount 方法应该始终在整个应用配置和资源注册完成后被调用。
app.mount('#app');

// 打印环境变量
console.log('当前模式:', import.meta.env.MODE);
console.log('是否开发环境:', import.meta.env.DEV);
console.log('是否生产环境:', import.meta.env.PROD);
console.log('基本公共路径:', import.meta.env.BASE_URL);
console.log('.env 环境变量:', import.meta.env.VITE_ENV);
console.log('.env[mode]] 环境变量:', import.meta.env.VITE_MODE);




